// 水平划分屏幕
export class Horizontal {
    // 格子之间的空格
    private readonly spacing: number;
    // // 左边 padding
    // private readonly leftPadding: number;
    // // 右边 padding
    // private rightPadding: number;
    // 顶部
    // private readonly topPadding: number;
    // // 底部 padding
    // private bottomPadding: number;

    // cell 大小
    private readonly cellWidth: number;

    // 网格大小(不确定, 宽度确定)
    // private gridWidth: number;
    // private readonly gridHeight: number;

    // 总列数
    // readonly columns: number;
    // readonly rows: number;
    cellCount: number

    constructor(spacing: number, cellWidth: number) {
        this.spacing = spacing;
        // this.leftPadding = leftPadding;
        // this.rightPadding = rightPadding;
        this.cellWidth = cellWidth;
        this.cellCount = 0;
    }

    // 往表中加一个 cell
    addCell() {
        this.cellCount++
    }

    delCell() {
        if (this.cellCount >= 1) {
            this.cellCount--
        }
    }

    // 重置
    reset() {
        this.cellCount = 0
    }

    // 格子宽度
    get gridWidth() {
        // 中间空格 + cell宽度
        return this.spacing * (this.cellCount - 1) + this.cellWidth * this.cellCount
    }

    // 根据第几个格子获取 cell x轴位置 (相对grid位置)
    getPositionByIndex(cellIndex: number) {
        if (this.cellCount === 1) {
            // 只有一个格子
            return 0
        }
        if (cellIndex >= this.cellCount) {
            // 没有此格式
            return undefined
        }
        // grid 锚点在(0.5, 0.5)
        // cell 锚点在(0.5, 0.5)
        // 几个空格 + 几个格子
        return this.spacing * cellIndex + this.cellWidth * cellIndex + this.cellWidth * 0.5 - this.gridWidth * 0.5
    }

    getAllPosition() {
        const list = []
        let pos
        for (let i = 0; i < this.cellCount; i++) {
            pos = this.getPositionByIndex(i)
            list.push(pos)
        }
        return list
    }

    // 根据位置获取点击的是第几个
    getIndexByPosition(posX: number) {
        return Math.floor((posX + this.gridWidth * 0.5) / (this.spacing + this.cellWidth))
    }
}
